package com.dong.stack;

import java.util.*;

/**
 * @author dcz
 * @classname TopKFrequent
 * @description 前K个高频词汇（优先级队列）
 * @date 2022/4/27 9:20
 */
public class TopKFrequent {
    public int[] topKFrequent(int[] nums, int k) {
        int[] result = new int[2];
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int num :nums){
            //就使用这个key对应的value值，如果没有就使用默认值defaultValue
            map.put(num,map.getOrDefault(num,0)+1);
        }

        Set<Map.Entry<Integer, Integer>> entries = map.entrySet();

//        PriorityQueue<Map.Entry<Integer, Integer>> queue = new PriorityQueue<>(
//                (o1, o2) -> o1.getValue() - o2.getValue());
        //按照出现频率从小到达排列

        PriorityQueue<Map.Entry<Integer, Integer>> queue = new PriorityQueue<>(new Comparator<Map.Entry<Integer, Integer>>() {
            @Override
            public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
                return o1.getValue() - o2.getValue();
            }
        });
        for (Map.Entry<Integer, Integer> entry : entries) {
            queue.offer(entry);
            if (queue.size() > k) {
                queue.poll();
            }
        }
        for (int i = k - 1; i >= 0; i--) {
            result[i] = queue.poll().getKey();
        }

        return result;
    }
}
